标签
spring
字数
300 字
阅读时间
2 分钟
配置类
java
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.MapSerializer;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.support.config.FastJsonConfig;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
import feign.codec.Encoder;
import feign.form.spring.SpringFormEncoder;
import org.springframework.beans.factory.ObjectFactory;
import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
import org.springframework.cloud.openfeign.support.ResponseEntityDecoder;
import org.springframework.cloud.openfeign.support.SpringDecoder;
import org.springframework.cloud.openfeign.support.SpringEncoder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
/**
* springboot 默认json处理框架换成FastJson
* author Brack.zhu
* date 2019/3/22
*/
@Configuration
@EnableWebMvc
public class FastJsonConfigurer implements WebMvcConfigurer {
static {//FIXME sunwen 替换FastJson Map序列化(修改Map数据为WriteMapNullValue),Map的子类无法通过@JSONType设置序列化参数
MapSerializer.instance = new FastJsonMapSerializer();
JSON.DEFAULT_GENERATE_FEATURE |= SerializerFeature.WriteDateUseDateFormat.getMask();//设置全局时间序列化方式
}
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(getFastJsonConverter());
}
@Bean
public ResponseEntityDecoder feignDecoder() {
HttpMessageConverter fastJsonConverter = getFastJsonConverter();
ObjectFactory<HttpMessageConverters> objectFactory = () -> new HttpMessageConverters(fastJsonConverter);
return new ResponseEntityDecoder(new SpringDecoder(objectFactory));
}
@Bean
public Encoder feignEncoder() {
return new SpringFormEncoder(new SpringEncoder(() -> new HttpMessageConverters(getFastJsonConverter())));
// return new SpringEncoder(() -> new HttpMessageConverters(getFastJsonConverter()));
}
private FastJsonHttpMessageConverter getFastJsonConverter() {
FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
fastConverter.setFastJsonConfig(getFastJsonConfig());
//处理中文乱码问题
List<MediaType> fastMediaTypes = new ArrayList<>();
fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
fastConverter.setSupportedMediaTypes(fastMediaTypes);
return fastConverter;
}
public static FastJsonConfig getFastJsonConfig(){
FastJsonConfig fastJsonConfig = new FastJsonConfig();
fastJsonConfig.setCharset(StandardCharsets.UTF_8);
fastJsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss");
// fastJsonConfig.getSerializeConfig().put(Json.class, new SwaggerJsonSerializer());
fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat, SerializerFeature.DisableCircularReferenceDetect);
// fastJsonConfig.setParseProcess(Extra.extraProcessor);
// fastJsonConfig.setSerializeFilters(Extra.extraFilter);
return fastJsonConfig;
}
}java
import com.alibaba.fastjson.serializer.JSONSerializer;
import com.alibaba.fastjson.serializer.MapSerializer;
import com.alibaba.fastjson.serializer.SerializerFeature;
import java.io.IOException;
import java.lang.reflect.Type;
public class FastJsonMapSerializer extends MapSerializer {
@Override
public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType, int features, boolean unwrapped) throws IOException {
features |= SerializerFeature.WriteMapNullValue.mask;//改写FastJson Map的序列化方式,Map的子类无法通过@JSONType设置序列化参数
super.write(serializer, object, fieldName, fieldType, features, unwrapped);
}
}